package com.dy.分类.数组._695_岛屿的最大面积;

/*
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。

找到给定的二维数组中最大的岛屿面积。(如果没有岛屿，则返回面积为0。)

示例 1:

[[0,0,1,0,0,0,0,1,0,0,0,0,0],
 [0,0,0,0,0,0,0,1,1,1,0,0,0],
 [0,1,1,0,1,0,0,0,0,0,0,0,0],
 [0,1,0,0,1,1,0,0,1,0,1,0,0],
 [0,1,0,0,1,1,0,0,1,1,1,0,0],
 [0,0,0,0,0,0,0,0,0,0,1,0,0],
 [0,0,0,0,0,0,0,1,1,1,0,0,0],
 [0,0,0,0,0,0,0,1,1,0,0,0,0]]
对于上面这个给定矩阵应返回 6。注意答案不应该是11，因为岛屿只能包含水平或垂直的四个方向的‘1’。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/max-area-of-island
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Solution {
    public int maxAreaOfIsland(int[][] grid) {
        int rows = grid.length;
        int cols = grid[0].length;
        if (rows == 0) return 0;
        boolean[][] visited = new boolean[rows][cols];
        int max =0;
        for (int i = 0; i < rows;i++){
            for(int j=0;j<cols;j++){
                if(!visited[i][j] &&grid[i][j]==1){
                   max = Math.max(dfs(i,j,visited,grid),max);
                }
            }
        }
        return max;
    }

    private int dfs(int i, int j,boolean[][] visited,int[][] grid) {
        if(i<0 ||i >=grid.length || j<0 || j>=grid[0].length || grid[i][j] ==0 || visited[i][j]==true){
            return 0;
        }
        visited[i][j] = true;
        return 1+dfs(i+1,j,visited,grid)+dfs(i-1,j,visited,grid)+dfs(i,j+1,visited,grid)+dfs(i,j-1,visited,grid);

    }

    public static void main(String[] args) {

    }
}
